Iz09PWlzZmF0YWxwbHVnaW49PT0NCiMgLSotIGNvZGluZzogdXRmLTggLSotDQoNCiMgIGZhdGFs
IHBsdWdpbg0KIyAgbWV0ZW9fcGx1Z2luLnB5DQoNCiMgIEluaXRpYWwgQ29weXJpZ2h0IMKpIEF2
aW5hciAgPGF2aW5hckB4bXBwLnJ1Pg0KIyAgTW9kaWZpY2F0aW9ucyBDb3B5cmlnaHQgwqkgR3Jh
bmRfRGl6ZWwgPGdyYW5kX2RpemVsQGphYmJlci5ydT4NCiMgIE1vZGlmaWNhdGlvbnMgQ29weXJp
Z2h0IMKpIDIwMTAgd2QvbG90dXNmZWV0IDxkYW8veW9nYT4NCg0KIyAgVGhpcyBwcm9ncmFtIGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkNCiMg
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5DQojICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcg0KIyAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4NCg0KIyAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsDQojICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KIyAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQ0KIyAgR05VIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCg0KaW1wb3J0IHhtbC5kb20ubWluaWRv
bSBhcyBtZG9tIA0KDQpnbXdlZWtkYXkgPSB7JzEnOiB1J1N1bmRheScsJzInOiB1J01vbmRheScs
JzMnOiB1J1R1ZXNkYXknLCc0JzogdSdXZWRuZXNkYXknLCc1JzogdSdUaHVyc2RheScsJzYnOiB1
J0ZyaWRheScsJzcnOiB1J1NhdHVyZGF5JywnOCc6IHUnU3VuZGF5J30NCmdtbW9udGggPSB7JzAx
JzogdSdKYW51YXJ5JywnMDInOiB1J0ZlYnJ1YXJ5JywnMDMnOiB1J01hcmNoJywnMDQnOiB1J0Fw
cmlsJywnMDUnOiB1J01heScsJzA2JzogdSdKdW5lJywnMDcnOiB1J0p1bHknLCcwOCc6IHUnQXVn
dXN0JywnMDknOiB1J1NlcHJlbWJlcicsJzEwJzogdSdPY3RvYmVyJywnMTEnOiB1J05vdmVtYmVy
JywnMTInOiB1J0RlY2VtYmVyJ30NCmdtY2xvdWRpbmVzcyA9IHsnMCc6IHUnY2xlYXInLCcxJzog
dSdjbG91ZHknLCcyJzogdSdjbG91ZHknLCczJzogdSdjbG91ZHknfQ0KZ21ob3VyID0geycwMSc6
IHUnTmlnaHQnLCcwMic6IHUnTmlnaHQnLCcwMyc6IHUnTmlnaHQnLCcwNCc6IHUnTmlnaHQnLCcw
NSc6IHUnTmlnaHQnLCcwNic6IHUnTmlnaHQnLCcwNyc6IHUnTW9ybmluZycsJzA4JzogdSdNb3Ju
aW5nJywnMDknOiB1J01vcm5pbmcnLCcxMCc6IHUnTW9ybmluZycsJzExJzogdSdNb3JuaW5nJywn
MTInOiB1J01vcm5pbmcnLCcxMyc6IHUnRGF5JywnMTQnOiB1J0RheScsJzE1JzogdSdEYXknLCcx
Nic6IHUnRGF5JywnMTcnOiB1J0RheScsJzE4JzogdSdEYXknLCcxOSc6IHUnRXZlbmluZycsJzIw
JzogdSdFdmVuaW5nJywnMjEnOiB1J0V2ZW5pbmcnLCcyMic6IHUnRXZlbmluZycsJzIzJzogdSdF
dmVuaW5nJywnMjQnOiB1J05pZ2h0J30NCmdtcHJlY2lwaXRhdGlvbiA9IHsnNCc6IHUncmFpbics
JzUnOiB1J2hlYXZ5IHJhaW4nLCc2JzogdSdzbm93JywnNyc6IHUnaGVhdnkgc25vdycsJzgnOiB1
J3N0b3JtJywnOSc6IHUnbm8gZGF0YScsJzEwJzogdSdyYWluJ30NCmdtd2luZGRpciA9IHsnMCc6
IHUn0KEnLCcxJzogdSfQodCSJywnMic6IHUn0JInLCczJzogdSfQrtCSJywnNCc6IHUn0K4nLCc1
JzogdSfQrtCXJywnNic6IHUn0JcnLCc3JzogdSfQodCXJ30NCg0KZGVmIGdldF9jaXR5X2NvZGVf
bmFtZShjb2RlX25hbWUpOg0KCWxpbmVzID0gW10NCgl0cnk6DQoJCXdmcCA9IGZpbGUoJ3N0YXRp
Yy9naXNtZXRlby50eHQnLCdyJykNCgkJbGluZXMgPSB3ZnAucmVhZGxpbmVzKCkNCgkJd2ZwLmNs
b3NlKCkNCglleGNlcHQ6DQoJCXJldHVybiAnJw0KCQkNCglmb3IgbGluZSBpbiBsaW5lczoNCgkJ
CWNkbm0gPSBsaW5lLnNwbGl0KCcgJywxKQ0KCQkJDQoJCQlpZiBjb2RlX25hbWUuaXNkaWdpdCgp
Og0KCQkJCWlmIGNkbm1bMF0uZGVjb2RlKCd1dGYtOCcpLnJlcGxhY2UoJ1xuJywnJykgPT0gY29k
ZV9uYW1lOg0KCQkJCQljY29kZSA9IGNkbm1bMV0NCgkJCQkJZGVsIGxpbmVzDQoJCQkJCXJldHVy
biBjY29kZQ0KCQkJZWxzZToNCgkJCQlpZiBjZG5tWzFdLmRlY29kZSgndXRmLTgnKS5yZXBsYWNl
KCdcbicsJycpID09IGNvZGVfbmFtZToNCgkJCQkJY2NvZGUgPSBjZG5tWzBdDQoJCQkJCWRlbCBs
aW5lcw0KCQkJCQlyZXR1cm4gY2NvZGUNCglyZXR1cm4gJycNCg0KZGVmIGdldF9naXNfd2VhdGhl
cihjY29kZSk6DQoJdHJ5Og0KCQl3cmVxID0gdXJsbGliMi5SZXF1ZXN0KHUnaHR0cDovL2luZm9y
bWVyLmdpc21ldGVvLnJ1L3htbC8nK2Njb2RlK3UnXzEueG1sJykNCgkJcmVzcCA9IHVybGxpYjIu
dXJsb3Blbih3cmVxKQ0KCQl3eG1sPXJlc3AucmVhZCgpDQoJCXJlc3AuY2xvc2UoKQ0KCQlyZXR1
cm4gd3htbA0KCWV4Y2VwdDoNCgkJcmV0dXJuICcnDQoJDQpkZWYgZ2V0X2VsZW1lbnRfYXR0dmFs
cyhkb20sZWxlbWVudCxpZHg9MCk6DQoJdHJ5Og0KCQlhdHR2YWxzID0ge30NCgkJZWxub2RlID0g
ZG9tLmdldEVsZW1lbnRzQnlUYWdOYW1lKGVsZW1lbnQudXBwZXIoKSkNCgkJYXR0a2V5cyA9IGVs
bm9kZVtpZHhdLmF0dHJpYnV0ZXMua2V5cygpDQoJCQ0KCQlmb3IgYXR0IGluIGF0dGtleXM6DQoJ
CQlhdHR2YWxzW2F0dF0gPSBlbG5vZGVbaWR4XS5nZXRBdHRyaWJ1dGUoYXR0KQ0KDQoJCXJldHVy
biBhdHR2YWxzDQoJZXhjZXB0Og0KCQlyZXR1cm4gJycNCg0KZGVmIHBhcnNlX3htbCh4bWwpOg0K
CXRyeToNCgkJdG1weG1sID0gb3MudG1wZmlsZSgpDQoJCXRtcHhtbC53cml0ZSh4bWwpDQoJCXRt
cHhtbC5zZWVrKDApDQoJCQ0KCQlkb20gPSBtZG9tLnBhcnNlKHRtcHhtbCkNCgkJDQoJCXRtcHht
bC5jbG9zZSgpDQoJCQ0KCQlkb20ubm9ybWFsaXplKCkNCgkJDQoJCXJldHVybiBkb20NCglleGNl
cHQ6DQoJCXJldHVybiAnJw0KCQ0KZGVmIGhhbmRsZXJfd2VhdGhlcl9naXNtZXRlbyh0eXBlLCBz
b3VyY2UsIHBhcmFtZXRlcnMpOg0KCWlmIHBhcmFtZXRlcnM6DQoJCWNpdHlfY29kZSA9IHBhcmFt
ZXRlcnMubG93ZXIoKS5zdHJpcCgpDQoNCgkJY2NvZGUgPSBnZXRfY2l0eV9jb2RlX25hbWUoY2l0
eV9jb2RlKQ0KCQkNCgkJaWYgY2NvZGU6DQoJCQl3enhtbCA9IGdldF9naXNfd2VhdGhlcihjY29k
ZSkNCgkJCQ0KCQkJaWYgbm90IHd6eG1sOg0KCQkJCXJlcGx5KHR5cGUsc291cmNlLCB1J1Vua25v
d24gZXJyb3IhJykNCgkJCQlyZXR1cm4NCgkJCQ0KCQkJZG9tID0gcGFyc2VfeG1sKHd6eG1sKQ0K
DQoJCQlpZiBub3QgZG9tOg0KCQkJCXJlcGx5KHR5cGUsc291cmNlLCB1J1BhcnNlciBFcnJvciEn
KQ0KCQkJCXJldHVybg0KCQkJDQoJCQl0b3duID0gY2l0eV9jb2RlLmNhcGl0YWxpemUoKQ0KCQkJ
Zm9yZWNhc3QgPSBnZXRfZWxlbWVudF9hdHR2YWxzKGRvbSwnZm9yZWNhc3QnKQ0KCQkJDQoJCQlk
YXkgPSBmb3JlY2FzdFsnZGF5J10NCgkJCW5tb250aCA9IGZvcmVjYXN0Wydtb250aCddDQoJCQlt
b250aCA9IGdtbW9udGhbbm1vbnRoXQ0KCQkJeWVhciA9IGZvcmVjYXN0Wyd5ZWFyJ10NCgkJCWhv
dXIgPSBmb3JlY2FzdFsnaG91ciddDQoJCQkNCgkJCXJlcCA9IHUnV2VhdGhlciAlcywgYXQgJXMg
JXMsICVzIC0gJXM6MDA6XG4nICUgKHRvd24sZGF5LG1vbnRoLHllYXIsaG91cikNCgkJCQ0KCQkJ
dGVtcGVyYXR1cmUgPSBnZXRfZWxlbWVudF9hdHR2YWxzKGRvbSwndGVtcGVyYXR1cmUnKQ0KCQkJ
dGVtcG1pbiA9IHRlbXBlcmF0dXJlWydtaW4nXQ0KCQkJdGVtcG1heCA9IHRlbXBlcmF0dXJlWydt
YXgnXQ0KCQkJDQoJCQlyZXAgKz0gdSdcblRlbXBlcmF0dXJlOiAlcy8lc8KwQy4gJyAlICh0ZW1w
bWluLHRlbXBtYXgpDQoJCQkNCgkJCXJlbHdldCA9IGdldF9lbGVtZW50X2F0dHZhbHMoZG9tLCdy
ZWx3ZXQnKQ0KCQkJd2V0bWluID0gcmVsd2V0WydtaW4nXQ0KCQkJd2V0bWF4ID0gcmVsd2V0Wydt
YXgnXQ0KDQoJCQlyZXAgKz0gdSdcbkh1bWlkaXR5OiAlcy0lcyUlLiAnICUgKHdldG1pbix3ZXRt
YXgpDQoJCQkNCgkJCXdpbmQgPSBnZXRfZWxlbWVudF9hdHR2YWxzKGRvbSwnd2luZCcpDQoJCQkN
CgkJCW5kaXIgPSB3aW5kWydkaXJlY3Rpb24nXQ0KCQkJd2RpciA9IGdtd2luZGRpcltuZGlyXQ0K
CQkJd2luZG1pbiA9IHdpbmRbJ21pbiddDQoJCQl3aW5kbWF4ID0gd2luZFsnbWF4J10NCgkJCQ0K
CQkJcmVwICs9IHUnXG5XaW5kOiAlcywgJXMtJXMg0Lwv0YEuICcgJSAod2Rpcix3aW5kbWluLHdp
bmRtYXgpDQoJCQkNCgkJCXByZXNzdXJlID0gZ2V0X2VsZW1lbnRfYXR0dmFscyhkb20sJ3ByZXNz
dXJlJykNCgkJCQ0KCQkJcHJlc3NtaW4gPSBwcmVzc3VyZVsnbWluJ10NCgkJCXByZXNzbWF4ID0g
cHJlc3N1cmVbJ21heCddDQoJCQkNCgkJCXJlcCArPSB1J1xuUHJlc3N1cmU6ICVzLSVzINC80Lwu
0YDRgi7RgdGCLiAnICUgKHByZXNzbWluLHByZXNzbWF4KQ0KCQkJDQoJCQlwaGVub21lbmEgPSBn
ZXRfZWxlbWVudF9hdHR2YWxzKGRvbSwncGhlbm9tZW5hJykNCgkJCQ0KCQkJbmNsb3VkID0gcGhl
bm9tZW5hWydjbG91ZGluZXNzJ10NCgkJCWNsb3VkID0gZ21jbG91ZGluZXNzW25jbG91ZF0NCgkJ
CQ0KCQkJcmVwICs9IHUnXG5PdmVyY2FzdDogJXMuICcgJSAoY2xvdWQpDQoJCQkNCgkJCW5wcmVj
aXAgPSBwaGVub21lbmFbJ3ByZWNpcGl0YXRpb24nXQ0KCQkJcHJlY2lwID0gZ21wcmVjaXBpdGF0
aW9uW25wcmVjaXBdDQoJCQkNCgkJCXJlcCArPSB1J1xuUHJlY2lwaXRhdGlvbjogJXMuJyAlIChw
cmVjaXApDQoJCQkNCgkJCXJlcGx5KHR5cGUsc291cmNlLCByZXApDQoJCWVsc2U6DQoJCQlyZXBs
eSh0eXBlLHNvdXJjZSwgdSdOb3QgZm91bmQhJykNCgllbHNlOg0KCQlyZXBseSh0eXBlICxzb3Vy
Y2UsIHUnSW52YWxpZCBzeW50YXghJykNCgkJDQpyZWdpc3Rlcl9jb21tYW5kX2hhbmRsZXIoaGFu
ZGxlcl93ZWF0aGVyX2dpc21ldGVvLCBDT01NX1BSRUZJWCsnZ2lzbWV0ZW8nLCBbJ2luZm8nLCdh
bGwnLCcqJ10sIDAsICdTaG93cyB3ZWF0aGVyIHdpdGggcmVzb3VyY2UgZ2lzbWV0ZW8ucnUsIGZv
ciBhbGwgY291bnRyaWVzLicsQ09NTV9QUkVGSVgrJ2dpc21ldGVvIDxjaXR5PicsIFtDT01NX1BS
RUZJWCsnZ2lzbWV0ZW8g0J3QvtCy0L7RgdC40LHQuNGA0YHQuicsQ09NTV9QUkVGSVgrJ2dpc21l
dGVvIFBhcmlzJ10p